package com.shujia.spark.mllib

import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors

object Demo1DataType {
  def main(args: Array[String]): Unit = {
    /**
     * 向量：有方向，有大小，向量中只能保存Double类型的数据
     *
     */

    /**
     * 稠密向量
     *
     */
    val dense: linalg.Vector = Vectors.dense(Array(1.0, 0.0, 2.3, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0))
    println(dense)
    /**
     * 稀疏向量： 只记录不为0的位置
     * 当数据中有很多0 的时候，稀疏向量占用的空间少
     *
     */
    val sparse: linalg.Vector = Vectors.sparse(15, Array(0, 2, 6), Array(1.0, 2.3, 1.0))
    println(sparse)

    /**
     * 稠密向量和稀疏向量可以相互转换
     *
     */

    println(dense.toSparse)
    println(sparse.toDense)

    /**
     * 标记数据
     * 目标值（y）和特征向量(x)组成
     *
     */
    val ngx: LabeledPoint = LabeledPoint(0.0, Vectors.dense(Array(1.0, 2.0, 3.0, 4.0)))
    println(ngx)

    val point: LabeledPoint = LabeledPoint(1.0, sparse)
    println(point)


  }

}
